package rhplus.servico;

import java.util.LinkedList;
import javax.jdo.PersistenceManager;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import rhplus.acessoBD.PMF;

@PersistenceCapable
public class Exame {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id_exame;
    @Persistent
    private Long id_medico;
    @Persistent
    private Long id_utente;
    @Persistent
    private Long id_hospital;
    @Persistent
    private Long id_servico;
    @Persistent
    private String especialidade;
    @Persistent
    private Long preco;
    @Persistent
    private double percentagem;
    @Persistent
    private String data;

    public Exame(Long medico, Long utente, Long hospital, Long servico, String espec, Long preco, double percent, String data) {

        this.id_medico = medico;
        this.id_utente = utente;
        this.id_hospital = hospital;
        this.id_servico = servico;
        this.especialidade = espec;
        this.preco = preco;
        this.percentagem = percent;
        this.data = data;
    }

    public void setId_servico(Long id_servico) {
        this.id_servico = id_servico;
    }

    public Long getId_servico() {
        return id_servico;
    }

    public void setId_hospital(Long id_hospital) {
        this.id_hospital = id_hospital;
    }

    public Long getId_hospital() {
        return id_hospital;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getData() {
        return data;
    }

    public String getEspecialidade() {
        return especialidade;
    }

    public Long getId_exame() {
        return id_exame;
    }

    public Long getId_medico() {
        return id_medico;
    }

    public Long getId_utente() {
        return id_utente;
    }

    public double getPercentagem() {
        return percentagem;
    }

    public Long getPreco() {
        return preco;
    }

    public void setEspecialidade(String especialidade) {
        this.especialidade = especialidade;
    }

    public void setId_exame(Long id_exame) {
        this.id_exame = id_exame;
    }

    public void setId_medico(Long id_medico) {
        this.id_medico = id_medico;
    }

    public void setId_utente(Long id_utente) {
        this.id_utente = id_utente;
    }

    public void setPercentagem(double percentagem) {
        this.percentagem = percentagem;
    }

    public void setPreco(Long preco) {
        this.preco = preco;
    }

    public static void insere(Exame e) {
        PersistenceManager pm = PMF.get().getPersistenceManager();

        try {
            pm.makePersistent(e);
        } finally {
            pm.close();
        }
    }

    public static void remove(final Long id_exame) {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        try {
            pm.currentTransaction().begin();
            Exame e = pm.getObjectById(Exame.class, id_exame);
            pm.deletePersistent(e);

            pm.currentTransaction().commit();
        } catch (Exception ex) {
            pm.currentTransaction().rollback();
            throw new RuntimeException(ex);
        } finally {
            pm.close();
        }
    }

    public static LinkedList<Exame> devolve() {

        String query = "select from " + Exame.class.getName();

        PersistenceManager pm = PMF.get().getPersistenceManager();

        LinkedList<Exame> lista = (LinkedList<Exame>) pm.newQuery(query).execute();

        return lista;

    }

    public static void alteraExame(Exame dados_do_exame) {
        PersistenceManager pm = PMF.get().getPersistenceManager();

        try {
            pm.currentTransaction().begin();

            dados_do_exame = pm.getObjectById(Exame.class, dados_do_exame.getId_exame());
          
            pm.makePersistent(dados_do_exame);
            pm.currentTransaction().commit();

        } catch (Exception ex) {
            pm.currentTransaction().rollback();
            throw new RuntimeException(ex);
        } finally {
            pm.close();
        }
    }
}
